package vo

import (
	"shop-manager/internal/do"
	"time"
)

type CreateGoodsReq struct {
	BarCode      string
	Name         string
	BoxRule      int
	FactoryPrice do.Money

	CategoryID []int // 实际一定有三个元素且都不为0, 分别为 分类,分线,品牌
}

type CreateGoodsRsp struct {
	ID int
}

type UpdateGoodsReq struct {
	ID int

	BarCode      string
	Name         string
	CategoryID   []int // 实际一定有三个元素且都不为0, 分别为 分类,分线,品牌
	BoxRule      int
	FactoryPrice do.Money
}

type UpdateGoodsRsp struct{}

type ListGoodsReq struct {
	Page     int
	PageSize int

	Search  string // search by goods name
	BarCode string // 多个用逗号或者分号隔开

	// 可按 分类 分线 品牌任意组合来查询
	ClassID int
	LevelID int
	BrandID int

	Sorts string

	OnlyUncategorized bool // 只展示未分类的商品

	IDs []int // 商品id列表
}

type Goods struct {
	ID int

	// 13位条码
	BarCode string
	// 名称(如: 舒客防蛀固齿牙膏120克)
	Name string

	// 厂价
	FactoryPrice do.Money

	// 关联的"三级分类": 分类,分线,品牌
	CategoryID int
	// 箱规(通俗来说, 就是一件`多少`个)
	BoxRule int

	CreatedAt time.Time
	UpdatedAt time.Time

	Category *Category // 冗余字段, 方便前端展示
}

type ListGoodsRsp struct {
	Items []*Goods
	Total int64
}

type ImportGoodsItem struct {
	BarCode      string
	Name         string
	FactoryPrice do.Money
	BoxRule      int
}

// ImportGoodsReq 导入商品请求
// 为了兼容前端传输，BarCode 使用 int 类型
// 导入时会自动转换为 13 位字符串
// CategoryID 会在后端自动填充
// 一次可导入多个商品
// 导入成功/失败的数量会在响应中返回
type ImportGoodsReq []*ImportGoodsItem

// ImportGoodsRsp 导入商品响应
type ImportGoodsRsp struct {
	SuccessCount int
	FailedCount  int
	ExistedCount int // 按条码来算已经导入过的
}

// BatchUpdateCategoryReq 批量更新商品分类请求
type BatchUpdateReq struct {
	GoodsIDs []int // 商品ID列表

	// 目前只支持修改分类
	CategoryID []int // 分类ID数组，实际一定有三个元素且都不为0，分别为分类、分线、品牌
}

// BatchUpdateCategoryRsp 批量更新商品分类响应
type BatchUpdateCategoryRsp struct {
	SuccessCount int // 成功更新的商品数量
	FailedCount  int // 更新失败的商品数量
}
